<?php
defined('ANT_ACCESS') or die('Access denided');
/**
 * Ant Framework
 *
 * An open source application development framework for PHP 5
 *
 * @package		Ant Framework
 * @author		Meshin Dmitriy
 * @copyright	Copyright (c) 2008, Meshin Dmitriy
 * @license		GNU Public Lisence v2
 * @link		http://code.google.com/p/ant-framework
 * @desc		Basic logic file
 **/

	@set_magic_quotes_runtime(0);
	@error_reporting(E_ALL);

	global $sys_folders;
	require_once($sys_folders['core'].'base'.EXT);

	//	главный конфиг
	$CFG =& get_config('configs');

	//	класс таймингов
	$BNCH =& load_class('benchmark');
	$BNCH->point('ANT_starting');
	
	//	формируем http-адрес
	$site_url = $CFG["site_protocol"] . "://" . $_SERVER["HTTP_HOST"] . $CFG["site_path"];

	//	автозагрузка
	require_once($sys_folders["configs"].'autoload'.EXT);
	
	if(TRUE === $CFG['enable_hooks']){
		$HOOKS =& load_class('hooks');
		$HOOKS->hook('pre_uri');
	}
	
	$URL =& load_class('url');
	
	if($CFG['template_caching'] OR $CFG['compress_output']){
		$CACHE =& load_class('cache');
		if(TRUE === $CFG['compress_output']){
			$CACHE->gzip();
		}
		if(TRUE === $CFG['template_caching']){
			$uid = md5($URL->uri_string.$CFG['default_theme']);
			header('Content-type: '.$CFG['content-type'].'; charset='.$CFG['charset']);
			if($CACHE->check_cache($uid)) {
				//	FIXME: удалить это
				echo "<br>Execution time: ".$BNCH->get_time('ANT_starting');
				echo "<br>Memory: ".$BNCH->memory_usage().' Mb';
				exit();
			}
		}
	}

	//	имя контроллера для вызова
	$contr_name = $URL->getController();
	if($contr_name == ''){
		$contr_name = $CFG['default_controller'];
	}

	//	имя метода для вызова
	$contr_method = $URL->getMethod();

	if(TRUE === $CFG['enable_hooks']){
		$HOOKS->hook('pre_controller');
	}
	
	//	адрес папки контроллера
	$sys_folders['self'] = $sys_folders['controllers'].$contr_name.'/';
	$contr_file = $sys_folders['self'].$contr_name.EXT;

	//	если не найден контроллер то шлём 404
	if(!file_exists($contr_file)){
		header("HTTP/1.0 404 Not Found");
		exit();
	}
	
	require_once($contr_file);

	//	экземпляр класса контроллера
	$CONTR = new $contr_name;
	$CONTR->autoload($autoload);
	if(is_callable(array(&$CONTR, $contr_method))){
		call_user_func_array(array(&$CONTR, $contr_method), $URL->getParams());
	}
	else
	{
		header("HTTP/1.0 404 Not Found");
		exit();
	}
	$CONTR->ApplicationRun();
	
	if(TRUE === $CFG['template_caching']){
		$CACHE->write_cache();
	}
	//	FIXME: удалить это
	echo "<br>Execution time: ".$BNCH->get_time('ANT_starting');
	echo "<br>Memory: ".$BNCH->memory_usage().' Mb';
?>